

import SwiftUI

struct ContentView: View {
    @EnvironmentObject var appState: AppState
    @Environment(\.openWindow) var openWindow
    @Environment(\.dismissWindow) var dismissWindow

    var body: some View {
        // ZStack 用于层叠视图
        ZStack {
            // 根据 appState.currentScreen 显示不同内容
            switch appState.currentScreen {
            case .splash1:
                // 使用系统图片或您自己的图片
                Image("Bosch_symbol_logo_black_red") // 替换为您自己的图片名称
                    .resizable()
                    .scaledToFit()
                    .onAppear {
                        // 1.5 秒后切换到第二个启动图
                        DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) {
                             withAnimation {
                                appState.currentScreen = .splash2
                            }
                        }
                    }
            case .splash2:
                 Image("XR for Manufacture") // 替换为您自己的图片名称
                    .resizable()
                    .scaledToFit()
                     .onAppear {
                        // 1.5 秒后切换到主菜单
                        DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) {
                             withAnimation {
                                appState.currentScreen = .mainMenu
                            }
                        }
                    }
            case .mainMenu:
                MainMenu() // 显示主菜单
                    .environmentObject(appState) // 确保子视图也能访问
            case .factorySelection:
                FactorySelectionView() // 显示工厂选择
                     .environmentObject(appState)
            }
        }
        //.glassBackgroundEffect() // visionOS 风格背景
        .onChange(of: appState.isImmersiveSpaceShown) { _, isShown in
             // 这个 onChange 可能不需要在 ContentView 中，
             // 因为打开/关闭主要由其他视图发起并由系统处理
             // 主要用于响应关闭事件来更新 currentScreen
             if !isShown && appState.currentScreen != .mainMenu && appState.currentScreen != .factorySelection {
                 // 如果沉浸空间关闭了，并且我们不是因为导航到主菜单/工厂选择而关闭的
                 // （例如，用户手动关闭了空间），则返回主菜单
                 // appState.currentScreen = .mainMenu // 或者根据逻辑决定去哪里
             }
         }
         .alert("安全注意事项", isPresented: $appState.showingSafetyAlert) {
             Button("确定", role: .cancel) { }
         } message: {
             Text("请在安全的环境下使用本应用。\n注意周围环境，避免碰撞。\n长时间使用请注意休息。")
         }
    }
}

// 主菜单视图
struct MainMenu: View {
    @EnvironmentObject var appState: AppState
    @Environment(\.openImmersiveSpace) var openImmersiveSpace
    @Environment(\.dismissImmersiveSpace) var dismissImmersiveSpace

    var body: some View {
        VStack(spacing: 20) {
            Text("主菜单")
                .font(.largeTitle)

            Button("工厂选择") {
                appState.currentScreen = .factorySelection
            }

            Button("安全须知") {
                appState.showingSafetyAlert = true
            }

            Button("显示通用 3D 模型") {
                 Task {
                     // 关闭可能已打开的旧空间
                     await dismissImmersiveSpace()
                     appState.isImmersiveSpaceShown = false

                     // 设置要显示的模型类型
                     appState.currentModelType = .generic // 使用一个通用模型
                     appState.resetModelStateForNewLoad()

                     // 打开沉浸空间
                     let result = await openImmersiveSpace(id: appState.immersiveSpaceID)
                     if case .opened = result {
                         appState.isImmersiveSpaceShown = true
                     } else {
                         print("Failed to open immersive space for generic model.")
                         appState.currentModelType = .none // 打开失败则重置
                     }
                 }
            }
             Button("预留按钮 4") {
                 // 添加功能或移除
                 print("Button 4 tapped")
             }
        }
        .padding(40)
    }
}
